/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */
package BeansGerenciaveis;

import DAO.AutorDao;
import DAO.PeriodicoGSDao;
import DAO.TemaDao;
import bean.Autor;
import bean.Editor;
import bean.PeriodicoGS;
import bean.Tema;
import java.io.Serializable;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.Iterator;
import javax.faces.application.FacesMessage;
import javax.faces.bean.ManagedBean;
import javax.faces.bean.ViewScoped;
import javax.faces.context.FacesContext;

/**
 *
 * @author fernando
 */
@ManagedBean
@ViewScoped
public class PeriodicoGSBean implements Serializable{

    /**
     * Creates a new instance of PeriodicoGSBean
     */
    public PeriodicoGSBean() {
        this.periodico = new PeriodicoGS();
        this.editorSelecionado = new Editor();
        this.editores = new ArrayList<Editor>();
        this.palavraChaveSelecionada = new Tema();
        this.palavrasChaves = new ArrayList<Tema>();
        this.periodicoSelecionado = new PeriodicoGS();



    }

    public void cadastrar() {
        this.periodico.setPalavrasChave(palavrasChaves);
        this.periodico.setEditores(editores);
        if (new PeriodicoGSDao().cadastrar(periodico)) {
            FacesContext facesContext = FacesContext.getCurrentInstance();
            facesContext.addMessage(null, new FacesMessage("Sucesso: ", "Periódico Cadastrado com Sucesso!"));
            periodico = new PeriodicoGS();
            this.editores = new ArrayList<Editor>();
            this.palavrasChaves = new ArrayList<Tema>();

        } else {
            FacesContext facesContext = FacesContext.getCurrentInstance();
            facesContext.addMessage(null, new FacesMessage(FacesMessage.SEVERITY_ERROR, "Erro", "Não foi Possível Cadastrar o Periódico!"));
        }

    }
    
      public String editar() {
        String resultado = "";
        if (new PeriodicoGSDao().alterar(periodico)) {
            FacesContext facesContext = FacesContext.getCurrentInstance();
            facesContext.addMessage(null, new FacesMessage("Sucesso: ", "Periódico Editado com Sucesso!"));
            resultado = "listar?faces-redirect=true&amp;includeViewParams=true";

        } else {
            FacesContext facesContext = FacesContext.getCurrentInstance();
            facesContext.addMessage(null, new FacesMessage(FacesMessage.SEVERITY_ERROR, "Erro", "Não foi Possível Cadastrar o Periódico!"));
        }
        
        return resultado;

    }
    
    

    public String selecionarEdicao() {
        String resultado = "";

        this.periodico = new PeriodicoGSDao().buscar(this.periodicoSelecionado.getId());
        /*
         this.listaEgressos = (ArrayList) curso.getEngressosCursos();
         this.listaAvaliacoes = (ArrayList) curso.getAvaliacoesMEC();
         this.listaCoordenacoes = (ArrayList) curso.getCoordenacoes();
         this.listaDocentesSelecionados = (ArrayList) curso.getProfessores();
         this.listaPPP = (ArrayList) curso.getPpps();*/

        this.periodicoSelecionado = new PeriodicoGS();
        resultado = "editar?faces-redirect=true&amp;includeViewParams=true";
        return resultado;
    }

    public PeriodicoGS getPeriodico() {
        return periodico;
    }

    public void setPeriodico(PeriodicoGS periodico) {
        this.periodico = periodico;
    }

    public PeriodicoGS getPeriodicoSelecionado() {
        return periodicoSelecionado;
    }

    public void setPeriodicoSelecionado(PeriodicoGS periodicoSelecionado) {
        this.periodicoSelecionado = periodicoSelecionado;
    }

    public ArrayList<Editor> getEditores() {
        return editores;
    }

    public void setEditores(ArrayList<Editor> editores) {
        this.editores = editores;
    }

    public ArrayList<Tema> getPalavrasChaves() {
        return palavrasChaves;
    }

    public void setPalavrasChaves(ArrayList<Tema> palavrasChaves) {
        this.palavrasChaves = palavrasChaves;
    }

    public ArrayList<Autor> getListaEditores() {
        return listaEditores;
    }

    public void setListaEditores(ArrayList<Autor> listaEditores) {
        this.listaEditores = listaEditores;
    }

    public Editor getEditorSelecionado() {
        return editorSelecionado;
    }

    public void setEditorSelecionado(Editor editorSelecionado) {
        this.editorSelecionado = editorSelecionado;
    }

    public ArrayList<Tema> getListaPalavrasChave() {
        return listaPalavrasChave;
    }

    public void setListaPalavrasChave(ArrayList<Tema> listaPalavrasChave) {
        this.listaPalavrasChave = listaPalavrasChave;
    }

    public Tema getPalavraChaveSelecionada() {
        return palavraChaveSelecionada;
    }

    public void setPalavraChaveSelecionada(Tema palavraChaveSelecionada) {
        this.palavraChaveSelecionada = palavraChaveSelecionada;
    }

    public ArrayList<String> getListaIndexadores() {
        if (this.listaIndexadores == null) {
            this.listaIndexadores = new ArrayList(Arrays.asList("Scielo", "Latindex", "Spell", "Sumarios.org", "Periódicos CAPES", "DOAJ", "Diadorim"));
            Iterator i = new PeriodicoGSDao().indexadoresCadastrados().iterator();
            while(i.hasNext()){
                if(!listaIndexadores.contains((String)i.next())){
                    listaIndexadores.add((String)i.next());
                }
            }
        }
        return listaIndexadores;
    }

    public void setListaIndexadores(ArrayList<String> listaIndexadores) {
        this.listaIndexadores = listaIndexadores;
    }

    public String getIndexadorNaoCadastrado() {
        return indexadorNaoCadastrado;
    }

    public void setIndexadorNaoCadastrado(String indexadorNaoCadastrado) {
        this.indexadorNaoCadastrado = indexadorNaoCadastrado;
    }

    public ArrayList<PeriodicoGS> getPeriodicos() {
        if (periodicos == null) {
            periodicos = new PeriodicoGSDao().listar();
        }
        return periodicos;
    }

    public void setPeriodicos(ArrayList<PeriodicoGS> periodicos) {
        this.periodicos = periodicos;
    }

    public void addIndexadorNovo() {
        if (this.listaIndexadores.contains(indexadorNaoCadastrado)) {
            FacesContext facesContext = FacesContext.getCurrentInstance();
            facesContext.addMessage(null, new FacesMessage(FacesMessage.SEVERITY_ERROR, "Erro: ", "Indexador já cadastrado na base de dados"));
        } else {
            this.listaIndexadores.add(indexadorNaoCadastrado);
            this.periodico.getIndexadores().add(indexadorNaoCadastrado);
            this.indexadorNaoCadastrado = "";
        }
    }

    public void addEditor() {
        editorSelecionado.setEditor(new AutorDao().consultaAutor(editorSelecionado.getEditor().getId()));
        if (this.editores.contains(editorSelecionado)) {
            FacesContext facesContext = FacesContext.getCurrentInstance();
            facesContext.addMessage(null, new FacesMessage(FacesMessage.SEVERITY_ERROR, "Erro", "Editor já adicionado!"));
        } else {

            this.editores.add(editorSelecionado);
            editorSelecionado = new Editor();

            FacesContext facesContext = FacesContext.getCurrentInstance();
            facesContext.addMessage(null, new FacesMessage("Sucesso", "Editor adicionado!"));

        }

    }

    public void removerEditor() {

        this.editores.remove(editorSelecionado);
        editorSelecionado = new Editor();

        FacesContext facesContext = FacesContext.getCurrentInstance();
        facesContext.addMessage(null, new FacesMessage("Sucesso: ", "Editor removido!"));




    }

    public void addEditorEdicao() {
        
        editorSelecionado.setEditor(new AutorDao().consultaAutor(editorSelecionado.getEditor().getId()));
        if (this.editores.contains(editorSelecionado)) {
            FacesContext facesContext = FacesContext.getCurrentInstance();
            facesContext.addMessage(null, new FacesMessage(FacesMessage.SEVERITY_ERROR, "Erro", "Editor já adicionado!"));
        } else {

            this.periodico.getEditores().add(editorSelecionado);
            editorSelecionado = new Editor();

            FacesContext facesContext = FacesContext.getCurrentInstance();
            facesContext.addMessage(null, new FacesMessage("Sucesso", "Editor adicionado!"));

        }

    }

    public void removerEditorEdicao() {
        this.periodico.getEditores().remove(editorSelecionado);
        editorSelecionado = new Editor();

        FacesContext facesContext = FacesContext.getCurrentInstance();
        facesContext.addMessage(null, new FacesMessage("Sucesso: ", "Editor removido!"));
        
    }

    public void addPalavraChave() {
        palavraChaveSelecionada = new TemaDao().consultarTema(palavraChaveSelecionada.getId());
        if (this.palavrasChaves.contains(palavraChaveSelecionada)) {
            FacesContext facesContext = FacesContext.getCurrentInstance();
            facesContext.addMessage(null, new FacesMessage(FacesMessage.SEVERITY_ERROR, "Erro", "Palavra-chave já adicionada!"));
        } else {
            this.palavrasChaves.add(palavraChaveSelecionada);
            palavraChaveSelecionada = new Tema();

            FacesContext facesContext = FacesContext.getCurrentInstance();
            facesContext.addMessage(null, new FacesMessage("Sucesso", "Palavra-chave adicionada!"));

        }


    }
    
     public void addPalavraChaveEdicao() {
        palavraChaveSelecionada = new TemaDao().consultarTema(palavraChaveSelecionada.getId());
        if (this.periodico.getPalavrasChave().contains(palavraChaveSelecionada)) {
            FacesContext facesContext = FacesContext.getCurrentInstance();
            facesContext.addMessage(null, new FacesMessage(FacesMessage.SEVERITY_ERROR, "Erro", "Palavra-chave já adicionada!"));
        } else {
            this.periodico.getPalavrasChave().add(palavraChaveSelecionada);
            palavraChaveSelecionada = new Tema();

            FacesContext facesContext = FacesContext.getCurrentInstance();
            facesContext.addMessage(null, new FacesMessage("Sucesso", "Palavra-chave adicionada!"));

        }


    }

    public void removerPalavraChave() {

        this.palavrasChaves.remove(palavraChaveSelecionada);
        palavraChaveSelecionada = new Tema();

        FacesContext facesContext = FacesContext.getCurrentInstance();
        facesContext.addMessage(null, new FacesMessage("Sucesso: ", "Palavra-chave removida!"));
    }
    
      public void removerPalavraChaveEdicao() {

        this.periodico.getPalavrasChave().remove(palavraChaveSelecionada);
        palavraChaveSelecionada = new Tema();

        FacesContext facesContext = FacesContext.getCurrentInstance();
        facesContext.addMessage(null, new FacesMessage("Sucesso: ", "Palavra-chave removida!"));
    }
    
    private ArrayList<PeriodicoGS> periodicos;
    private PeriodicoGS periodico;
    private PeriodicoGS periodicoSelecionado;
    private ArrayList<Editor> editores;
    private ArrayList<Tema> palavrasChaves;
    private Editor editorSelecionado;
    private Tema palavraChaveSelecionada;
    private ArrayList<Tema> listaPalavrasChave;
    private ArrayList<Autor> listaEditores;
    private ArrayList<String> listaIndexadores;
    private String indexadorNaoCadastrado;
}
